package com.bfly.mall.product.dto;

import com.alibaba.fastjson.annotation.JSONField;
import com.bfly.core.config.ResourceConfigure;
import com.bfly.mall.product.entity.ProductSku;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Comparator;
import java.util.List;

/**
 * 商品列表DTO
 *
 * @author 长沙商脉科技有限公司
 * @date 2020/9/15 21:23
 */
public class ProductListDTO implements Serializable {

    private static final long serialVersionUID = 7060389326040804796L;
    private int id;
    private String name;
    @JSONField(serialize = false)
    private String cover;
    private String unit;
    private boolean onShelf;
    private int sales;
    private int tag;
    private int seq;

    /**
     * 类别名称
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 15:32
     */
    private String categoryName;

    /**
     * 运费模板名称
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 15:32
     */
    private String freightTemplateName;

    /**
     * 产品SKU
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 21:30
     */
    private List<ProductSku> skus;

    public String getShelfName(){
        return isOnShelf()?"上架":"下架";
    }

    public String getUrl() {
        return StringUtils.isNotBlank(getCover()) ? ResourceConfigure.getResourceHttpUrl(getCover()) : "";
    }

    /**
     * 获得最低价格规格的产品
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 15:20
     */
    private ProductSku getMinPriceSku() {
        List<ProductSku> skus = getSkus();
        skus.sort(Comparator.comparing(ProductSku::getPrice));
        return skus.get(0);
    }

    /**
     * 显示最低价钱规格的产品原始价格信息
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 14:54
     */
    public BigDecimal getOriginalPrice() {
        return getMinPriceSku().getOriginalPrice();
    }

    /**
     * 显示最低价钱规格的产品价格信息
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 14:58
     */
    public BigDecimal getPrice() {
        return getMinPriceSku().getPrice();
    }

    /**
     * 显示最低加钱规格的产品VIP价格信息
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 14:58
     */
    public BigDecimal getVipPrice() {
        return getMinPriceSku().getVipPrice();
    }

    /**
     * 显示总库存
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/9/23 14:59
     */
    public int getTotalStock() {
        int total = getSkus().stream().mapToInt(ProductSku::getStock).sum();
        return total;
    }

    public int getSeq() {
        return seq;
    }

    public void setSeq(int seq) {
        this.seq = seq;
    }

    public int getTag() {
        return tag;
    }

    public void setTag(int tag) {
        this.tag = tag;
    }

    public List<ProductSku> getSkus() {
        return skus;
    }

    public void setSkus(List<ProductSku> skus) {
        this.skus = skus;
    }

    public String getCategoryName() {
        return categoryName;
    }

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public String getFreightTemplateName() {
        return freightTemplateName;
    }

    public void setFreightTemplateName(String freightTemplateName) {
        this.freightTemplateName = freightTemplateName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSales() {
        return sales;
    }

    public void setSales(int sales) {
        this.sales = sales;
    }

    public String getCover() {
        return cover;
    }

    public void setCover(String cover) {
        this.cover = cover;
    }
    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }

    public boolean isOnShelf() {
        return onShelf;
    }

    public void setOnShelf(boolean onShelf) {
        this.onShelf = onShelf;
    }
}